/*        process :是否要抓取
 *         time : 抓取的时间
 *         timeUnit :时间单位 ； 有的银行以年为单位，有的银行以月为单位
 *         dateformat ： 时间的格式化 yyyyMMdd
 *         startTime : 抓取的开始时间
 *         endTime ： 抓取的结束时间
*/
var bankNameMapping = {
    "ICBC":"邮储银行",
    "CIB":"兴业银行",
    "HXB":"华夏银行",
    "BEIJING":"北京银行",
    "CMB":"招商银行",
    "CGB":"广发银行",
    "CCB":"建设银行",
    "PSBC":"邮储银行",
    "SPD":"浦发银行",
    "ABC":"农业银行",
    "CMBC":"民生银行",
    "BOC":"中国银行",
    "COMM":"交通银行",
    "CITIC":"中信银行",
    "CEB":"光大银行",
    "PINGAN":"平安银行",
    "SHANGHAI":"上海银行",

}

var conf = {
    "ICBC" : {
        DEBITCARD : {
            pc1:{
                process : true,
                time : 5,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 3,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        }
    },
    "CIB":{
        DEBITCARD:{
            wap:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "YYYY-MM"
            }
        },
        CREDITCARD : {
            wap:{
                process : true,
                time : 6,
                timeUnit : "M", //Y/M/D
                dateformat : "YYYY-MM",
            }
        }
    },
    "HXB":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 6,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd",
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 6,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        }
    },
    "BEIJING":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 7,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        }
    },
    "CMB":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 14,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        },
        CREDITCARD : {
            wap2:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "YYYY-MM"
            },
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "YYYY-MM"
            }
        }
    },
    "CGB":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMM"
            }
        }
    },
    "CCB":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 18,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 3,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        }
    },
    "PSBC":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        }
    },
    "SPD":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 2,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        }
    },
    "ABC":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 3,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        }
    },
    "CMBC":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 2,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            },
        }
    },
    "BOC":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 6,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 3,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd"
            },
            wap1:{
                process : true,
                time : 6,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        }
    },
    "COMM":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 6,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd",
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 6,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd",
            },
            wap:{
                process : true,
                time :6 ,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd",
            }

        }
    },
    "CITIC":{
        DEBITCARD:{
            pc3:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd",
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            },
            pc2:{
                process : true,
                time :6 ,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd",
            }

        }
    },
    "CEB":{
        DEBITCARD:{
            pc2:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd",
            }
        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 6,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd"
            },
            pc2:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd",
            }

        }
    },
    "PINGAN":{      //TODO
        DEBITCARD:{
            pc1:{
                process : true,
                time : 6,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd",
            },
            pc2:{
                process : true,
                time : 3,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd",
            },
            pc4:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd",
            }

        },
        CREDITCARD : {
            wap:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd",
            },
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd",
            },
            pc2:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd",
            },
            pc3:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd",
            }
        }
    },
    "SHANGHAI":{
        DEBITCARD:{
            pc1:{
                process : true,
                time : 1,
                timeUnit : "Y", //Y/M/D
                dateformat : "yyyyMMdd"
            }

        },
        CREDITCARD : {
            pc1:{
                process : true,
                time : 6,
                timeUnit : "M", //Y/M/D
                dateformat : "yyyyMMdd"
            }
        }
    }
}

//短信时间配置
var bankSmsWaitTime = {
    "ICBC" : {
        DEBITCARD : {
            pc1:60,
        },
        CREDITCARD : {
            pc1:60,
        }
    },
    "CIB":{
        DEBITCARD:{
            wap1:0,
        },
        CREDITCARD : {
            wap1:0,
        }
    },
    "HXB":{
        DEBITCARD:{
            pc1:0,
        },
        CREDITCARD : {
            pc1:0,
        }
    },
    "BEIJING":{
        DEBITCARD:{
            pc1:60,
        },
        CREDITCARD : {
            pc1:60,
        }
    },
    "CMB":{
        DEBITCARD:{
            pc1:60,
        },
        CREDITCARD : {
            wap2:120,
        }
    },
    "CGB":{
        DEBITCARD:{
            pc1:0,
        },
        CREDITCARD : {
            pc1:0,
        }
    },
    "CCB":{
        DEBITCARD:{
            pc1:0,
        },
        CREDITCARD : {
            pc1:0,
        }
    },
    "PSBC":{
        DEBITCARD:{
            pc1:0,
        },
        CREDITCARD : {
            pc1:0,
        }
    },
    "SPD":{
        DEBITCARD:{
            pc1:60,
        },
        CREDITCARD : {
            pc1:60,
        }
    },
    "ABC":{
        DEBITCARD:{
            pc1:0,
        },
        CREDITCARD : {
            pc1:0,
        }
    },
    "CMBC":{
        DEBITCARD:{
            pc1:0,
        },
        CREDITCARD : {
            pc1:0,
        }
    },
    "BOC":{
        DEBITCARD:{
            pc1:0,
        },
        CREDITCARD : {
            pc1:0,
            wap1:0,
        }
    },
    "COMM":{
        DEBITCARD:{
            pc1:180,
        },
        CREDITCARD : {
            pc1:180,
            wap:180,
        }
    },
    "CITIC":{
        DEBITCARD:{
            pc3:240,
        },
        CREDITCARD : {
            pc1:240,
            pc2:240
        }
    },
    "CEB":{
        DEBITCARD:{
            pc2:120,
        },
        CREDITCARD : {
            pc1:120,
            pc2:120,
        }
    },
    "PINGAN":{      //TODO
        DEBITCARD:{
            pc1:180,
            pc2:180,
            pc4:180,

        },
        CREDITCARD : {
            wap:0,
            pc1:180,
            pc2:180,
            pc3:180,
        }
    },
    "SHANGHAI":{
        DEBITCARD:{
            pc1:120,
        },
        CREDITCARD : {
            pc1:120,
        }
    }
}

/**
 * 获取银行抓取时间的集合，从开始到结束--各银行根据自己银行的情况自己配置自己银行的时间和时间格式
 */
function getBankTimeList(billDate){
    //获取银行
    var bankname = context.get("bankName");
    //卡类型
    var cardType = context.get("cardType");
    //入口标识
    var entrance = context.get("entrance");
    if (StringUtils.isBlank(bankname)) {
        throw new BankException("BALO-99601-05", "未能找到相应的bankName");
    } else if (StringUtils.isBlank(cardType)) {
        throw new BankException("BALO-99601-05", "未能找到相应的卡类型");
    } else if (StringUtils.isBlank(entrance)) {
        throw new BankException("BALO-99601-05", "未能找到相应的入口信息");
    }
    logger.info("开始获取银行时间集合 bankName【{}】,cardType【{}】,entrance【{}】",bankname,cardType,entrance);
    var timeUnit = conf[bankname][cardType][entrance]["timeUnit"];
    var dateformat = conf[bankname][cardType][entrance]["dateformat"];
    var time = conf[bankname][cardType][entrance]["time"];
    logger.info("获取到的时间参数 timeUnit【{}】, dateformat【{}】 ,time【{}】开始计算时间集合",timeUnit,dateformat,time);
    var dates = new ArrayList();
    var cld = Calendar.getInstance();
    var sdf = new SimpleDateFormat(dateformat);
    if (timeUnit == "M") {
        time = Integer.parseInt(time);
    } else if(timeUnit == "Y"){
        time = Integer.parseInt(time)*12;
    }
    for (var i = 0; i < time; i++) {
        var day = cld.get(Calendar.DAY_OF_MONTH);
        if (day <= Integer.parseInt(billDate)) {
            cld.add(Calendar.MONTH, -1);
            dates.add(sdf.format(cld.getTime()));
        } else {
            dates.add(sdf.format(cld.getTime()));
            cld.add(Calendar.MONTH, -1);
        }
    }
    return dates;
}

/**
 * 获取短信验证码，自动获取等待时间
 */
function waitSmsCode(){
    //获取银行
    var bankname = context.get("bankName");
    //卡类型
    var cardType = context.get("cardType");
    //入口标识
    var entrance = context.get("entrance");
    if (StringUtils.isBlank(bankname)) {
        throw new BankException("BALO-99601-05", "未能找到相应的bankName");
    } else if (StringUtils.isBlank(cardType)) {
        throw new BankException("BALO-99601-05", "未能找到相应的卡类型");
    } else if (StringUtils.isBlank(entrance)) {
        throw new BankException("BALO-99601-05", "未能找到相应的入口信息");
    }
    var waitTime = bankSmsWaitTime[bankname][cardType][entrance];
    logger.info("获取当前银行【{}】，抓取类型【{}】，入口【{}】的短信等待时间【{}】",bankname,cardType,entrance,waitTime);
    var verifyMessage = waitSmsCodeBySeconds(context, Integer.parseInt(waitTime));
    return verifyMessage;
}


